A storage server is a computer system that is used to store and retrieve data on behalf of one or more clients on a network. A storage server operates on behalf of one or more clients to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks or tapes. In conventional network storage systems, the mass storage devices may be organized into one or more groups of drives (e.g., redundant array of inexpensive drives (RAID)). A storage server also typically includes internal memory that is used as a buffer cache, to speed up the reading and writing of data from and to (respectively) the main mass storage system from a client's perspective. In conventional storage servers, this buffer cache typically is implemented in the form of dynamic random access memory (DRAM).
A storage server may be configured to service file-level requests from clients, as in the case of file servers used in a network attached storage (NAS) environment. Alternatively, a storage server may be configured to service block-level requests from clients, as done by storage servers used in a storage area network (SAN) environment. Further, some storage servers are capable of servicing both file-level and block-level requests, as done by certain storage servers made by Network Appliance, Inc. of Sunnyvale, Calif.
It is desirable to improve the performance of storage servers, and there are various ways of accomplishing this. One way is to reduce the latency associated with accessing a storage server's primary persistent storage subsystem or internal buffer cache. In this regard, flash memory has certain desirable properties. Flash memory generally has a very fast random read access speed compared to that of conventional disk drives. Also, flash memory is substantially cheaper than conventional DRAM and is not volatile like DRAM.
It is also desirable for a storage server to be able to boot quickly, particularly when used in a large-scale enterprise environment which experiences high volumes of data traffic. One way to accomplish this is to store the boot code for the storage server in flash memory. Flash is also well suited for this purpose because of its non-volatile nature and fast random read access properties.
One problem with flash memory, however, is that it tends to wear out after a finite number of erase-write cycles. In a system that is subject to heavy workloads, it is possible that a critical flash memory component will fail before the system has reached its expected lifespan. Failure of a memory component that is being used to store critical software or data can be disastrous.